package 链表题.反转单向链表;

import 链表题.ListNode;

public class Test4 {
    /*
      方法四: 从链表中每次拿到第二个节点, 将其从链表断开, 插入头部, 直至它为null结束
     */

    /**
     *  o1(旧头), n1(新头), o2(旧老二)
     */

    public static ListNode reverseList(ListNode o1) {
        if (o1 == null || o1.next == null) {
            return o1;
        }
        ListNode o2 = o1.next;
        ListNode n1 = o1;
        while (o2 != null) {
            o1.next = o2.next;
            o2.next = n1;
            n1 = o2;
            o2 = o1.next;
        }
        return n1;
    }

    public static void main(String[] args) {
        ListNode o5 = new ListNode(5,null);
        ListNode o4 = new ListNode(4,o5);
        ListNode o3 = new ListNode(3,o4);
        ListNode o2 = new ListNode(2,o3);
        ListNode o1 = new ListNode(1,o2);
        System.out.println(o1);
        ListNode n1 = reverseList(o1);
        System.out.println(n1);
    }
}
